#ifndef S_GRASP_MED
#define S_GRASP_MED

#include "Solucao.h"
#include "ListaSolucao.h"
#include "ListaAtri.h"

class ListaSolucao;

class SolucaoGRASPCobertura : public Solucao{
	
	public:
		SolucaoGRASPCobertura *getVizinho(int mov);
		void getVizinho2(int f);
		int getVizinhoAval(int f);
		SolucaoGRASPCobertura *getSWAP(int i, int j);
		int mov; //Indica a posicao onde ocorreu o movimento da solucao
		SolucaoGRASPCobertura();
		SolucaoGRASPCobertura(SolucaoGRASPCobertura *sol);
		void init();
		bool todosClientesAlocados();
		int f();
		double g(int);
		void setElemento(int);
		SolucaoGRASPCobertura *getVizinhosADD();
		SolucaoGRASPCobertura *getVizinhosDROP();
		SolucaoGRASPCobertura *getVizinhosSWAP();
		SolucaoGRASPCobertura *getVizinhosSWAPCluster();
		
		static void update(double &S, double &M, double d);
		static void putRealSoluction();


	static bool compare(SolucaoGRASPCobertura *s1, SolucaoGRASPCobertura *s2)
    	{
         	return (s1->avaliacao < s2->avaliacao);
    	}

};

struct SolucaoCompare
{
  bool operator()(SolucaoGRASPCobertura *s1, SolucaoGRASPCobertura *s2) const
  {
    return (s1->avaliacao > s2->avaliacao);
  }
};


#endif

